<?php
namespace app\admin\model;

use think\Model;

class User extends Model
{
    // 是否需要自动写入时间戳 如果设置为字符串 则表示时间字段的类型
    //protected $autoWriteTimestamp = false;
    //protected $auto = [];

    /**
     * sort_order排序后的栏目列表
     * @return mixed
     */
    public function all_list()
    {
        return $this->order('sort_order desc')->select();
    }

    /**
     * 分页
     */
    public function pageQuery()
    {
        $page = $this->order('id', 'desc')->paginate('10'); //input('post.pagesize/d')
        return $page;
    }

    /**
     * 根据主键 id 查找用户信息
     * @param $user_id
     * @return array|bool|false|\PDOStatement|string|Model
     */
    public function getById($user_id)
    {
        if ($user_id <=0 || ceil($user_id) != $user_id) return false;
        return $this->where(['id' => $user_id])->find();
    }

    /**
     * 模型数据验证
     * @param $data
     * @return bool|string
     */
    public function data_verify($data)
    {
        //17年 6月18日新增  验证场景的使用 + 是否更新操作 //$update = isset($data['id']) ? ['id' => $data['id']] : []; //是否更新操作
        $rule = isset($data['id']) ? \think\Request::instance()->controller() . '.edit' : true;
        if (isset($data['password'])) $data['password'] = md5($data['password']);
        //17年 6月12日 修改，使用验证器验证规则的设置。
        $result = $this->validate($rule)->allowField(true)->save($data, $rule === true ? false : true);
        if(false === $result){
            //  验证失败 输出错误信息
            $error = $this->getError();
            if (is_array($error)) {
                return $error[key($error)];
            }else {
                return $error;
            }
        }
        \think\Session::set('user_name', $data['username']);
        return $this->id;
    }

    /**
     * 根据用户名密码检测输入是否正确
     * @param $username
     * @param $password
     * @return bool|array
     */
    public function check_user($username, $password)
    {
        //1.根据用户名查询用户信息
        $user_info = $this->where('username', $username)->find();

        if( !$user_info || $user_info->username != $username || $user_info->password !=  md5($password) ) {
            return false;
        }
        return $user_info;
    }

    /**
     * 修改密码操作
     * @param $old_password
     * @param $password
     * @param $new_password
     * @return string
     */
    public function change_password($old_password, $password, $new_password)
    {
        if (empty($old_password) || empty($password) || empty($new_password)) return '密码不能为空';

        if ($new_password != $password) return '确认密码和新密码不同';

        // 查询旧密码是否匹配
        $uid = Session::get('uid');
        if (!$user = $this->find($uid)) {
            return '旧密码输入有误';
        }
        //验证通过，修改密码
        $salt = strss(8); //1.生成秘钥
        $user->salt = $salt;
        $user->password = md5( md5($password).$salt );
        if ( $user->save() === false ) {
            return '修改密码失败，请稍后重试';
        }
        return '密码修改成功';
    }

    /**
     * 审核用户的支付宝
     * @param string $id
     * @return bool
     */
    public function check($id){
        if (!$id || !is_int($id)) return false;
        $result = $this->get($id);
        //$result = Config::get($id);
        if(false !== $result){
            $result->is_check = 1;
            if ( $result->save() ) {
                return true;
            }else {
                return false;
            }
        }else{
            return false;
        }
    }
    /**
     * 删除
     */
    public function del($id){
        if (!$id || !is_int($id)) return false;
        $result = $this->get($id);
        //$result = Config::get($id);
        if(false !== $result){
            if ( $result->delete() ) {
                return true;
            }else {
                return false;
            }
        }else{
            return false;
        }
    }
    
    //---------------------------- 前台用户操作方法 -------------------------------------------
    /**
     * 签到方法
     * @param $user_id
     * @return bool|false|int|string
     */
    public function sign($user_id)
    {
        $user = $this->find($user_id);
        // 先判断今日是否已经签到
        if (date('Y-m-d') == $user->is_sign)
        {
            return '今日已签到';
        }
        $user->sign_money += 0.5;
        $user->sign_num += 1;
        $user->is_sign = date('Y-m-d');

        return $user->save();
    }

    /**
     * 抽奖方法
     * @param $user_id
     * @return bool|false|int|string
     */
    public function lottery($user_id)
    {
        $user = $this->find($user_id);
        if (empty($user))
            return '签到失败';
        // 先判断今日是否已经签到
        if (date('Y-m-d') != $user->is_sign)
        {
            return '请签到后再抽奖';
        }
        if (date('Y-m-d') == $user->is_lottery)
        {
            return '今日已抽奖';
        }
        $user->is_lottery = date('Y-m-d');

        return $user->save();
    }

    /**
     *  用户绑定支付宝的操作
     * @param $user_id
     * @param $data
     * @return $this|bool
     */
    public function bindAlipay($user_id, $data)
    {
        if ( !isMobile($data) && !filter_var($data, FILTER_VALIDATE_EMAIL))
            return '支付宝账号输入有误';
        // 入库操作
        return $this->where(['id' => $user_id])->update(['alipay' => $data]);
    }

    public function bindReferee($user_id, $data)
    {
        return $this->where(['id' => $user_id])->update(['referee' => $data]);
    }
}